package com.yequan.work;

import org.apache.commons.codec.binary.Base64;

import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;

public class TongchengHelper {

    /**
     * 创建 sign
     *
     * @param map
     * @param timestamp
     * @param signKey
     * @return
     */
    private static String createSign(Map<String, Object> map, long timestamp, String signKey) throws Exception {
        String paramStr = mapToRequestBody(map);
        return Md5(paramStr + "&timestamp=" + timestamp + "&sign_key=" + signKey).toLowerCase();
    }

    private static String mapToRequestBody(Map<String, Object> map) {
        StringBuilder builder = new StringBuilder();
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            if (null != entry.getValue()) {
                builder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            }
        }
        return builder.substring(0, builder.length() - 1);
    }

    public static void main(String[] args) throws Exception {

        TreeMap<String, Object> map = new TreeMap<>(Comparator.comparing(s -> s));


        //询价参数
//        price(map);

//        submitRideParam(map);
        //上车接口
//        getOnParam(map);

//        geOffParam(map);

//        payParam(map);

//        phone(map);

//        cancelRide(map);

        getDetail(map);
//        tongchengCallbackParam(map);

//        syncTongchengStatusParam(map);

//        subsidy(map);

        String kv = mapToRequestBody(map);
        System.out.println("kv: " + kv);
        long timestamp = System.currentTimeMillis();
        System.out.println("timestamp: " + timestamp);
        //aliyun
        String sign = createSign(map, timestamp, "R9wk3VKvA1I");


        //线上
//        String sign = createSign(map, timestamp, "0c03TVOlzy8");
        System.out.println("sign: " + sign);
    }

    private static void subsidy(TreeMap<String, Object> map) {
        map.put("orderId", "765653623806885888");
        map.put("subsidy", 3000);
    }

    private static void price(TreeMap<String, Object> map) {
//        map.put("startLon", "120.739019");
//        map.put("startLat", "31.252341");
//        map.put("startShortAddress", "同程旅行大厦");
//        map.put("startLongAddress", "江苏省苏州市苏州工业园区酝慧路66号");
//        map.put("endLon", "121.3596179");
//        map.put("endLat", "31.2067113");
//        map.put("endShortAddress", "上海虹桥国际机场");
//        map.put("endLongAddress", "上海市长宁区新泾镇福泉路淞虹三街坊");
//        map.put("startTime", "20201212090500");
//        map.put("personNum", 2);
//        map.put("rideCategory", 1);

//        map.put("startLon", "116.477259");
//        map.put("startLat", "40.025257");
//        map.put("startShortAddress", "朝来高科技产业园");
//        map.put("startLongAddress", "朝阳区-容达路与紫月路交叉路口东北侧");
//        map.put("endLon", "117.216853");
//        map.put("endLat", "39.142488");
//        map.put("endShortAddress", "天津火车站");
//        map.put("endLongAddress", "天津市-河北区-新纬路1号");
//        map.put("startTime", "20210115103000");
//        map.put("personNum", 4);
//        map.put("rideCategory", 1);

//        map.put("startLon", "114.86694244478073");
//        map.put("startLat", "30.362056281405415");
//        map.put("startShortAddress", "鄂州站");
//        map.put("startLongAddress", "鄂州市-鄂城区-江碧路");
//        map.put("endLon", "114.98644687958637");
//        map.put("endLat", "30.506605179515425");
//        map.put("endShortAddress", "黄冈东站");
//        map.put("endLongAddress", "黄冈市-黄州区-新华路");
//        map.put("startTime", "20210119103000");
//        map.put("personNum", 1);
//        map.put("rideCategory", 1);

        //同程用车
        map.put("startLon", "120.739316");
        map.put("startLat", "31.252006");
        map.put("startShortAddress", "同程旅行大厦-南门");
        map.put("startLongAddress", "同程旅行大厦-南门");
        map.put("endLon", "121.484119");
        map.put("endLat", "31.237473");
        map.put("endShortAddress", "南京路步行街");
        map.put("endLongAddress", "南京路步行街");
        map.put("startTime", "20210420160000");
        map.put("personNum", 1);
        map.put("rideCategory", 1);


//        map.put("startLon", "116.477259");
//        map.put("startLat", "40.025257");
//        map.put("startShortAddress", "朝来高科技产业园");
//        map.put("startLongAddress", "朝阳区-容达路与紫月路交叉路口东北侧");
//        map.put("endLon", "117.216853");
//        map.put("endLat", "39.142488");
//        map.put("endShortAddress", "天津火车站");
//        map.put("endLongAddress", "天津市-河北区-新纬路1号");
//        map.put("startTime", "20210326120000");
//        map.put("personNum", 2);
//        map.put("rideCategory", 1);

//        map.put("startLon", "116.02845");
//        map.put("startLat", "36.44670");
//        map.put("startShortAddress", "凤凰新城西区(东门)");
//        map.put("startLongAddress", "山东省聊城市东昌府区开发区");
//        map.put("endLon", "117.05928");
//        map.put("endLat", "36.68090");
//        map.put("endShortAddress", "区直西社区居委会");
//        map.put("endLongAddress", "山东省济南市历城区山大路街道区直西社区居委会迪诺幼儿园");
//        map.put("startTime", "20210112183500");
//        map.put("personNum", 1);
//        map.put("rideCategory", 1);

//        map.put("startLon", "120.44389");
//        map.put("startLat", "31.35298");
//        map.put("startShortAddress", "倪芝圩");
//        map.put("startLongAddress", "倪芝圩");
//        map.put("endLon", "120.40531");
//        map.put("endLat", "30.87585");
//        map.put("endShortAddress", "同心村");
//        map.put("endLongAddress", "同心村");
//        map.put("startTime", "20210115103000");
//        map.put("personNum", 1);
//        map.put("rideCategory", 1);

//        map.put("startLon", "116.47395");
//        map.put("startLat", "40.025085");
//        map.put("startShortAddress", "朝来科技园");
//        map.put("startLongAddress", "北京市朝来科技园");
//        map.put("endLon", "117.208093");
//        map.put("endLat", "39.091103");
//        map.put("endShortAddress", "天津火车站");
//        map.put("endLongAddress", "天津市火车站");
////        map.put("startTime", null);
//        map.put("personNum", 4);
//        map.put("rideCategory", 1);

//        map.put("startLon", "120.736102");
//        map.put("startLat", "31.296812");
//        map.put("startShortAddress", "联丰广场");
//        map.put("startLongAddress", "江苏省苏州市苏州工业园区敦煌路28号");
//        map.put("endLon", "121.3596179");
//        map.put("endLat", "31.2067113");
//        map.put("endShortAddress", "长宁区新泾镇");
//        map.put("endLongAddress", "上海市长宁区新泾镇福泉路淞虹三街坊");
//        map.put("startTime", "20201203193500");
//        map.put("personNum", 4);
//        map.put("rideCategory", 1);

//        map.put("rideCategory",1);
//        map.put("startLat",31.314778);
////        map.put("startShortAddress",null);
//        map.put("endLat",31.2067113);
//        map.put("startLongAddress","江苏省苏州市苏州工业园区斜塘街道星湖街199号湖东邻里中心");
////        map.put("endShortAddress",null);
//        map.put("startLon",120.727944);
//        map.put("endLon",121.3596179);
//        map.put("startTime","20201203173500");
//        map.put("personNum",4);
//        map.put("endLongAddress","上海市长宁区新泾镇福泉路淞虹三街坊");

//        map.put("rideCategory",1);
//        map.put("startLat",31.314778);
//        map.put("startShortAddress","");
//        map.put("endLat",31.2067113);
//        map.put("startLongAddress","江苏省苏州市苏州工业园区斜塘街道星湖街199号湖东邻里中心");
//        map.put("endShortAddress","");
//        map.put("startLon",120.727944);
//        map.put("endLon",121.3596179);
//        map.put("startTime","20201203173500");
//        map.put("personNum",4);
//        map.put("endLongAddress","上海市长宁区新泾镇福泉路淞虹三街坊");

    }


    private static void cancelRide(TreeMap<String, Object> map) {
        map.put("orderId", "773167574601957376");
        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("phone", new String(Base64.encodeBase64("18237508501-0576".getBytes())));
//        map.put("phone", new String(Base64.encodeBase64("18852400865".getBytes())));
//        map.put("reason", "不想去");
    }

    private static void payParam(TreeMap<String, Object> map) {
        map.put("orderId", "773184110226046977");
        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("phone", "MTMwMjk3Nzg0NDc=");
    }

    private static void phone(TreeMap<String, Object> map) {
        map.put("orderId", "664054669181452288");
        map.put("phone", "MTg4NTI0MDA4NjU=");
    }

    private static void getOnParam(TreeMap<String, Object> map) {
        map.put("orderId", "764739757845512193");
        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
    }

    private static void geOffParam(TreeMap<String, Object> map) {
        map.put("orderId", "764739757845512193");
        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
    }

    private static void tongchengCallbackParam(TreeMap<String, Object> map) throws Exception {
        map.put("orderId", "652071392598032385");
        map.put("partnerOrderId", "TC00022");
        map.put("orderStatus", 20);
        map.put("driverPhone", "16300010003");
//        map.put("cancelType", null);
        map.put("create_time", date2String(new Date()));
    }

    public static void syncTongchengStatusParam(TreeMap<String, Object> map) throws Exception {
        map.put("orderId", "655807249641373697");
        map.put("create_time", date2String(new Date()));
    }

    public static String Md5(String key) throws Exception {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] md5Bytes = md5.digest(key.getBytes());
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) {
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16) {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }

    private static void submitRideParam(TreeMap<String, Object> map) {

//        map.put("partnerOrderId", "TC00100");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("startLon", "120.44389");
//        map.put("startLat", "31.35298");
//        map.put("startShortAddress", "倪芝圩");
//        map.put("startLongAddress", "倪芝圩");
//        map.put("endLon", "120.40531");
//        map.put("endLat", "30.87585");
//        map.put("endLongAddress", "同心村");
//        map.put("endShortAddress", "同心村");
//        map.put("earliestTime", "20210115103000");
//        map.put("latestTime", "20210115103000");
//        map.put("price", 6773);
//        map.put("rideCategory", 1);
//        map.put("personNum", 1);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");

//        map.put("partnerOrderId", "TC00094");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("startLon", "116.02845");
//        map.put("startLat", "36.44670");
//        map.put("startShortAddress", "凤凰新城西区(东门)");
//        map.put("startLongAddress", "山东省聊城市东昌府区开发区");
//        map.put("endLon", "117.05928");
//        map.put("endLat", "36.68090");
//        map.put("endLongAddress", "山东省济南市历城区山大路街道区直西社区居委会迪诺幼儿园");
//        map.put("endShortAddress", "区直西社区居委会");
//        map.put("earliestTime", "20210112183500");
//        map.put("latestTime", "20210112183500");
//        map.put("price", 8694);
//        map.put("rideCategory", 1);
//        map.put("personNum", 1);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");

//        map.put("partnerOrderId", "TC00022");
//        map.put("phone",new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("startLon", "120.608572");
//        map.put("startLat", "31.330971");
//        map.put("startShortAddress", "苏州汽车北站");
//        map.put("startLongAddress", "苏州汽车北站2号口");
//        map.put("endLon", "120.61413");
//        map.put("endLat", "31.331512");
//        map.put("endLongAddress", "苏州火车站公交站");
//        map.put("endShortAddress", "苏州火车站");
//        map.put("earliestTime", "20210115103000");
//        map.put("latestTime", "20201125130000");
//        map.put("price", 700);
//        map.put("rideCategory", 0);
//        map.put("personNum", 1);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");

        //下单参数
//        map.put("partnerOrderId", "TC00108");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("startLon", "116.477259");
//        map.put("startLat", "40.025257");
//        map.put("startShortAddress", "朝来高科技产业园");
//        map.put("startLongAddress", "朝阳区-容达路与紫月路交叉路口东北侧");
//        map.put("endLon", "117.216853");
//        map.put("endLat", "39.142488");
//        map.put("endLongAddress", "天津市-河北区-新纬路1号");
//        map.put("endShortAddress", "天津火车站");
//        map.put("earliestTime", "20210119103000");
//        map.put("latestTime", "20210119103000");
//        map.put("price", 23552);
//        map.put("rideCategory", 0);
//        map.put("personNum", 4);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");

//        map.put("partnerOrderId", "TC00111");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("startLon", "114.86694244478073");
//        map.put("startLat", "30.362056281405415");
//        map.put("startShortAddress", "鄂州站");
//        map.put("startLongAddress", "鄂州市-鄂城区-江碧路");
//        map.put("endLon", "114.98644687958637");
//        map.put("endLat", "30.506605179515425");
//        map.put("endLongAddress", "黄冈市-黄州区-新华路");
//        map.put("endShortAddress", "黄冈东站");
//        map.put("earliestTime", "20210120103000");
//        map.put("latestTime", "20210120103000");
//        map.put("price", 4379);
//        map.put("rideCategory", 1);
//        map.put("personNum", 1);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");


//        map.put("partnerOrderId", "TC00131");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
////        map.put("phone", new String(Base64.encodeBase64("15600011234".getBytes())));
//        map.put("startLon", "123.24833700");
//        map.put("startLat", "41.76205800");
//        map.put("startShortAddress", "阳光100果岭公馆(优诗美地西南)");
//        map.put("startLongAddress", "辽宁省沈阳市铁西区沈阳市经济技术开发区十号路阳光100果岭公馆(优诗美地西南)");
//        map.put("endLon", "125.13621900");
//        map.put("endLat", "42.88758100");
//        map.put("endLongAddress", "吉林省辽源市龙山区向阳街道连阳路57号龙山新城");
//        map.put("endShortAddress", "龙山新城");
//        map.put("earliestTime", "20210208090000");
//        map.put("latestTime", "20210208100000");
//        map.put("price", 15351);
//        map.put("rideCategory", 1);
//        map.put("personNum", 1);

        //同程用车
        map.put("partnerOrderId", "SFC0006");
        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
        map.put("startLon", "120.739316");
        map.put("startLat", "31.252006");
        map.put("startShortAddress", "同程旅行大厦-南门");
        map.put("startLongAddress", "同程旅行大厦-南门");
        map.put("endLon", "121.484119");
        map.put("endLat", "31.237473");
        map.put("endLongAddress", "南京路步行街");
        map.put("endShortAddress", "南京路步行街");
        map.put("earliestTime", "20210508160000");
        map.put("latestTime", "20210508160000");
        map.put("price", 6930);
        map.put("rideCategory", 1);
        map.put("personNum", 1);

//        map.put("partnerOrderId", "TC00153");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
////        map.put("phone", new String(Base64.encodeBase64("15600011234".getBytes())));
//        map.put("startLon", "116.477259");
//        map.put("startLat", "40.025257");
//        map.put("startShortAddress", "朝来高科技产业园");
//        map.put("startLongAddress", "朝阳区-容达路与紫月路交叉路口东北侧");
//        map.put("endLon", "117.216853");
//        map.put("endLat", "39.142488");
//        map.put("endLongAddress", "天津市-河北区-新纬路1号");
//        map.put("endShortAddress", "天津火车站");
//        map.put("earliestTime", "20210323120000");
//        map.put("latestTime", "20210323120000");
//        map.put("price", 153248);
//        map.put("rideCategory", 1);
//        map.put("personNum", 2);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");

//        map.put("partnerOrderId", "TC00060");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("startLon", "113.42378400");
//        map.put("startLat", "22.94185900");
//        map.put("startShortAddress", "广州新东方烹饪学校");
//        map.put("startLongAddress", "广东省广州市番禺区泰安路47号");
//        map.put("endLon", "113.85206800");
//        map.put("endLat", "22.76958600");
//        map.put("endLongAddress", "广东省深圳市宝安区松岗街道松岗汽车站");
//        map.put("endShortAddress", "松岗汽车站");
//        map.put("earliestTime", "20201218120000");
//        map.put("latestTime", "20201218130000");
//        map.put("price", 7213);
//        map.put("rideCategory", 1);
//        map.put("personNum", 1);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");

//        map.put("partnerOrderId", "HS5FD1947320449A623U9250");
//        map.put("phone", "MTg4NTI0MDA4NjU=");
//        map.put("startLon", "120.739019");
//        map.put("startLat", "31.252341");
//        map.put("startShortAddress", "同程旅行大厦");
//        map.put("startLongAddress", "江苏省苏州市苏州工业园区酝慧路66号");
//        map.put("endLon", "121.3596179");
//        map.put("endLat", "31.2067113");
//        map.put("endLongAddress", "上海市长宁区新泾镇福泉路淞虹三街坊");
//        map.put("endShortAddress", "上海虹桥国际机场");
//        map.put("earliestTime", "20201212090500");
//        map.put("latestTime", "20201212100500");
//        map.put("price", 7633);
//        map.put("rideCategory", 1);
//        map.put("personNum", 2);
//        map.put("name", "龚志强");
//        map.put("idCardNo", "MzIwNDgzMTk5MjA4MTQwNDE1");
    }

    private static void getDetail(TreeMap<String, Object> map) {
        map.put("orderId", "787231067055587328");
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
//        map.put("phone", new String(Base64.encodeBase64("15506132279".getBytes())));
        map.put("phone", "MTYwMDAwMDM0MzI=");
    }

    public static String date2String(Date date) throws Exception {
        if (null == date) {
            return null;
        }
        return new SimpleDateFormat("yyyyMMddHHmmss").format(date);
    }

}
